home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / data / nyan / nyan.plt < prev   
Text File  |  1991-10-18  |  43KB  |  1,663 lines

  1. /*                                    *
  2. *     NiftY Auto Navigator(NYAN)        *
  3. *                                    *
  4. *     このオートパイロットについては,流用,変更,組み込み,         *
  5. *                         許可なくOKです。     *
  6. *    ただし,以下の著作権表示については,必ず,コピーして下さい。    *
  7. *                                    *
  8. *    All Right Reserved, Copyright (c)  モップ(NIFTY-PFF00570) 1991    *
  9. *                                 (Masahiro Kezuka)            *
  10. *                                                     *
  11. *                                  1991年 7月  3日 初版  Ver0.01              *
  12. *                                  1991年 7月  7日 2版  Ver0.02              *
  13. *                                  1991年 7月 13日 3版  Ver0.03              *
  14. *                                  1991年 8月  3日 4版  Ver0.04              */
  15.  
  16. var modem[40];        /* modem 種別 /NoMNPAT/MNPAT/会社名モデム機種名    */
  17. var telno[30];        /* 電話番号                    */
  18. var telty[10];        /* 回線の種別 1200|2400|2400T            */
  19. var telno2[30];        /* 電話番号(Retry)                */
  20. var telty2[10];        /* 回線の種別(Retry) 1200|2400|2400T        */
  21. var line[5];        /* プッシュ回線か,ダイヤル回線か T/P        */
  22. var id[9];        /* NIFTYのユーザID                */
  23. var pass[9];        /* パスワード                    */
  24. var logd[20];        /* ログ格納用ディレクトリー(最後の\はなし)    */
  25. var forum[1000];    /* フォーラム名( 「,」 で複数)             */
  26. var hp[1000];        /* HP ID/HPパスワード/HP名( 「,」 で複数)    */
  27.  
  28.  
  29. /***********************************************************************
  30. *
  31. *              共通の処理ルーチン
  32. *
  33. ***********************************************************************/
  34. /*  パラメタで指定されたファイルを削除する */
  35. %delfile{ [ filename ]
  36.     dispoff({Yes});
  37.     command({del }|filename);
  38.     dispoff({No})
  39. };
  40.  
  41. /* パラメタで指定されたディレクトリへ移動する(「A:\」と「A:」の両方が可能) */
  42. %setcdir2 {[dir]
  43.     %dir2 @case(@nochar(dir),
  44.         2,{im(dir|{\})},,{im(dir)});
  45.     setcdir(dir2)
  46. };
  47.  
  48. /* 指定されたディレクトリー配下に,第2パラメターで指定されたディレクトリを
  49.      (もし,無ければ)作成する。 */
  50. %mkdir{ [ dir , name ]
  51.     dispoff({Yes});
  52.     case(@setcdir2(dir), {Yes}, {
  53.         command({mkdir } | name )},
  54.       {No},{select({装置(} | dir | {)が使えませんが?},99999,{},
  55.         {  もう一回やってみる },{mkdir(dir,name)},
  56.         {  自動処理をやめる },{stop},
  57.         {  無視して先の処理をやる },{})
  58.            });
  59.     dispoff({No})
  60. };
  61.  
  62. /* 第1パラメタのファイルの中身を 第2パラメタのファイルにコピーする */
  63. %copyfile{[OldName,NewName]
  64.     dispoff({Yes});
  65.     command({copy }| OldName | { } | NewName);
  66.     dispoff({No})
  67. };
  68.  
  69. /* オープンされているメモを全て, クローズする */
  70. %CloseAllMemo{
  71.     case(@mcheck !=0,
  72.     {Yes},{ loop({ mclose(2);
  73.                im(@mcheck !=0)
  74.         })
  75.     })
  76. };
  77.  
  78. /***********************************************************************
  79. *
  80. *              自動的に,Niftyに接続し,目的の処理を行う
  81. *
  82. ***********************************************************************/
  83. %autoacc2{
  84.  
  85. /***********************************************************************
  86. *
  87. *  ROAD1,ROAD2の各タイプに応じて,接続処理を行う 
  88. *
  89. ***********************************************************************/
  90.     %type00 {
  91.     type({.00+});
  92.     wait(20        ,type00,  /* 20秒待って,なにもこないなら,00+ */
  93.              {46+}    ,type00,  /* 46+ なら 00+                      */
  94.              {+\n00+}    ,type00,  /* 00+ なら 00+                      */
  95.              {Enter}    ,      /* Enter C.. なら 終わり */
  96.         );
  97.     };
  98.  
  99.     %Road2c {
  100.     type({C NIF\n});
  101.     wait(20,{stop},{*},Road2c,{Connect},)
  102.     };
  103.  
  104.     %Road2p {
  105.     wait(4,);
  106.     type({@P\n});
  107.     wait(20,{stop},{*},);    /* *を待つ */
  108.     Road2c;
  109.     };
  110.  
  111.     %callrd11 {[telno]
  112.     %MNPOff    @case(@getchar(modemtype,5,1),
  113.             {m},{ im({\N0}) },
  114.             {n},{ im({}    ) } );
  115.     display({ROAD1/1200(} | telno | {)に電話をかけます\n});
  116.     baud(1200);
  117.     dialone({AT} | @head(modem,{/})| MNPOff |
  118.         {D} | line | { } | telno ,
  119.         {type00;im({No})},{im({Yes})})
  120.     };
  121.     %callrd12 {[telno]
  122.     display({ROAD1/2400(} | telno | {)に電話をかけます\n});
  123.     baud(maxbaud);
  124.         dialone({AT} | @head(modem,{/}) |@body(modem,{/},{/}) | {D} | 
  125.         line |     { } | telno ,
  126.         {type00;im({No})},{im({Yes})})
  127.     };
  128.     %callrd2 {[telno]
  129.     display({ROAD2/2400(} | telno | {)に電話をかけます\n});
  130.     baud(maxbaud);
  131.     dialone({AT} | @head(modem,{/}) |@body(modem,{/},{/}) | {D} | 
  132.         line |     { } | telno ,
  133.         {Road2p;im({No})},{im({Yes})})
  134.     };
  135.  
  136.     %callone{[telty,telno]
  137.     case(telty,
  138.         {1200},    {callrd11(telno)},
  139.         {2400},    {callrd12(telno)},
  140.         {2400T},{callrd2(telno)} ,
  141.                ,{im({Yes})}       )
  142.     };
  143.  
  144.     %callnif{
  145.     %modemtype @tail(modem,{_});
  146.     %maxbaud @getchar(modemtype,1,4);
  147.     dispecho({No});
  148.          /* MNPなら, 送信文書はエコーバックを表示する */
  149.     case(@getchar(modemtype,5,1),{m},{dispecho({Yes})});
  150.  
  151.     loop({
  152.         case(@callone(telty,telno),
  153.         {Yes},{        callone(telty2,telno2)
  154.         },{No},{im({No})
  155.         })
  156.     })
  157.     };
  158.  
  159. /***********************************************************************
  160. *
  161. *              未読のメールをダウンする
  162. *
  163. ***********************************************************************/
  164.     %GoMail{
  165.     type({MAIL\n});
  166.     wait(20,{stop},
  167.     {\n>},{
  168.             type({SET MENU OFF\n});
  169.             wait(30,{stop},{\nMAIL>})
  170.     },{\nMAIL>});
  171.  
  172.         type({SET PAGE OFF\n});
  173.         wait(30,{stop},{\nMAIL>})
  174.     };
  175.  
  176.     %Mail2 {
  177.     loop({
  178.         wait(30,{stop},
  179.             {終了)\n>}    ,{type({\n}); im({Yes})},
  180.             {終了)\n:}    ,{type({2\n});im({Yes})},
  181.             {\naction:}    ,{type({SAVE\n});im({Yes})},
  182.             {終了)\n>}    ,{im({No})},
  183.             {\nMAIL>}    ,{im({No})}
  184.         )
  185.     })
  186.     };
  187.  
  188.  
  189.     %MailDown {
  190.     wait(20,{stop},{\n>},);
  191.  
  192.     GoMail;
  193.  
  194.     mkdir(logd,{MAIL});
  195.     receive(logd | {\mail\mail.log});
  196.     type({READ NEW\n});
  197.     Mail2;
  198.     stoprec;
  199.     };
  200.  
  201. /***********************************************************************
  202. *
  203. *  HPの未読をダウンする 
  204. *
  205. ***********************************************************************/
  206.     %GoHP{[name,pass]
  207.         type({GO HP\n});
  208.         wait(30,{stop},{\n>},);
  209.         type({1\n});
  210.         wait(30,{stop},{\n:},);
  211.         type(name|{\n});
  212.     wait(100,{stop},
  213.       {該当する利用者の},{
  214.                 wait(30,{stop},{\n>},);
  215.             im({No})
  216.     },{\nHP>},{
  217.             type({SET PAGE OFF\n});
  218.             wait(100,{stop},{\nHP>},,);
  219.             im({Yes})
  220.     },{\n:},{    type(pass|{\n});
  221.             wait(100,{stop},{\nHP>},,);
  222.             type({SET PAGE OFF\n});
  223.             wait(100,{stop},{\nHP>},,);
  224.             im({Yes})
  225.       });
  226.     };
  227.  
  228.     %oneHP {[name,pass,fname] 
  229.    /* down all message */
  230.     delfile(fname | {.tlt});
  231.         receive(fname | {.tlt});
  232.  
  233.     GoHP(name,pass);
  234.  
  235.     test(,,{\nHP>},{
  236.             stoprec;
  237.         receive(fname | {.log});
  238.         type({READ NEW\n});      /* type first boad number */
  239.         wait(60,{stop},
  240.             {\nHP>}        ,,
  241.                     {◆指定日付以降},{wait(60,{stop},{\nHP>},)}
  242.         );
  243.         stoprec;
  244.         case(id = name,
  245.           {Yes},{
  246.             delfile( fname | {.usr});
  247.             receive(fname | {.usr});
  248.             type({GUEST\n});
  249.             wait(100,stop,{\nHP>});
  250.             stoprec;
  251.         })
  252.     },,{    stoprec
  253.     })
  254.     };
  255.  
  256.     %HP{
  257.     var hp2[200];
  258.     mkdir(logd,{HP});
  259.     hp2 := hp;
  260.     loop({
  261.         %hpset @head(hp2,{,});
  262.         hp2 := @body(hp2,{,});
  263.         oneHP(  @head(hpset,{/}) ,
  264.             @body(hpset,{/},{/}),
  265.             logd | {\hp\} | @tail(hpset,{/}) );
  266.         im( hp2 <> {} )
  267.     });
  268.     };
  269.  
  270. /***********************************************************************
  271. *
  272. *             フォーラムの未読をダウンロードする 
  273. *
  274. ***********************************************************************/
  275.     %GoForum{[fname]
  276.     %SetMode{
  277.             type({SET PAGE OFF\n});
  278.             wait(30,{stop},{\nFORUM>});
  279.             type({SEND OFF\n});
  280.             wait(30,{stop},{\nFORUM>})
  281.     };
  282.     type({GO }| fname |{\n});
  283.     loop({
  284.             wait(30,{stop},
  285.             {終了)\n>}    ,{type({\n});im({Yes})},
  286.             {◆番号又はコマンドを入力},
  287.                      {
  288.                         wait(30,{stop},{\n>},);
  289.                     im({No})},
  290.             {◆現在このフォーラムは},
  291.                      {
  292.                         wait(30,{stop},{\n>},);
  293.                     im({No})},
  294.             {-保守作業の為},
  295.                      {
  296.                         wait(30,{stop},{\n>},);
  297.                     im({No})},
  298.             {終了\n>}    ,{
  299.                         type({SET MENU OFF\n});
  300.                         wait(30,{stop},{\nFORUM>});
  301.                     SetMode;
  302.                     im({No})},
  303.             {\nFORUM>}    ,{
  304.                     SetMode;
  305.                     im({No})}
  306.         )
  307.     });
  308.     };
  309.  
  310.     %oneForum { [ fname ]
  311.  
  312.     %ForumDir   logd | {\} | fname;
  313.  
  314.     %readall{
  315.           %Down3{[boadn]
  316.             stoprec;
  317.             receive( ForumDir | {\MES} | boadn | {.log});
  318.             readall;
  319.         };
  320.             wait(10000,{stop},{◆次頁はありません◆},,
  321.              {MES( 1):},{Down3({01})},{MES( 2):},{Down3({02})},
  322.              {MES( 3):},{Down3({03})},{MES( 4):},{Down3({04})},
  323.              {MES( 5):},{Down3({05})},{MES( 6):},{Down3({06})},
  324.              {MES( 7):},{Down3({07})},{MES( 8):},{Down3({08})},
  325.              {MES( 9):},{Down3({09})},{MES(10):},{Down3({10})},
  326.              {MES(11):},{Down3({11})},{MES(12):},{Down3({12})},
  327.              {MES(13):},{Down3({13})},{MES(14):},{Down3({14})},
  328.              {MES(15):},{Down3({15})},{MES(16):},{Down3({16})},
  329.              {MES(17):},{Down3({17})},{MES(18):},{Down3({18})},
  330.              {MES(19):},{Down3({19})},{MES(20):},{Down3({20})}
  331.             );   
  332.             
  333.     };
  334.  
  335.     mkdir(logd , fname);
  336.     delfile( ForumDir | {\title} | {.log});
  337.         receive( ForumDir | {\title} | {.log});
  338.  
  339.     GoForum(fname);
  340.  
  341.     test(,,{\nFORUM>},{
  342.             type({MES\n});
  343.             wait(30,{stop},{\n>});
  344.             type({MREAD\n\n});
  345.  
  346.             readall;
  347.  
  348.             stoprec;
  349.             wait(30,{stop},{\n>},);
  350.             type({SEND ON\n});
  351.             wait(30,{stop},{\n>},)
  352.     },,{    stopret;
  353.     })
  354.     };
  355.  
  356.  
  357.     %Forum{
  358.     var f2[1000];
  359.     f2 := forum;  /* forum= 「FORUM1,FORUM2,,,」 */
  360.     loop({
  361.         %fname @head(f2,{,});
  362.         f2 := @body(f2,{,});
  363.         oneForum(  fname );
  364.         im( f2 <> {} )
  365.     });
  366.     };
  367.  
  368. /***********************************************************************
  369. *
  370. *             Niftyの課金情報を見る。
  371. *
  372. ***********************************************************************/
  373.     %bill{
  374.     delfile( logd | {\BILL.LOG});
  375.         receive( logd | {\BILL.LOG});
  376.     type({GO BILL\n});
  377.     wait(30,stop,{了)\n>},);
  378.     type({1\n});
  379.     wait(30,stop,{了)\n>},);
  380.     stoprec;
  381.     };
  382. /***********************************************************************
  383. *
  384. *             フォーラム, HP , メールに, メッセージをアップする。
  385. *
  386. ***********************************************************************/
  387.     %UpText{
  388.     var IndexLine[82];
  389.     %FNameTop logd | {\UP\};
  390.     %IndexFName FNameTop | {INDEX.TXT}; /* 制御ファイル */
  391.     %SaveFName FNameTop | {SAVE.TXT};   /* 作業用のファイル*/
  392.  
  393.         /* 制御ファイルから, 予約(予)されたファイルを一つ取り出し 
  394.             アップ処理を行う  */
  395.     %UpOne{
  396.         %UpBody{
  397.             %fno @head(@getchar(IndexLine,4,3),{ });
  398.             send( FNameTop | {MES} | fno | {.TXT});
  399.             type({\n/E\n});
  400.             wait(300,{stop},{\n:},);
  401.             type({2\n});
  402.             loop({  /* メールの不在通知のために */
  403.                     wait(30,{stop},
  404.                   {処理)\n>}    ,{type({\n});im({Yes})},
  405.                   {\n:}    ,{im({No})}
  406.                 )
  407.             });
  408.             type({1\n}); /*  2 :For Debug */
  409.         };
  410.         %UpForum{
  411.             %ResNum    @getchar(IndexLine,26,3);
  412.  
  413.             GoForum(@getchar(IndexLine,14,8));
  414.  
  415.                  type({MES }| @getchar(IndexLine,23,2) |{\n});
  416.             wait(30,{stop},{\nCCS(N)>},);
  417.             case( ResNum ,{   }, {
  418.                 type({SAY\n});
  419.                 wait(30,{stop},{\n:},);
  420.                 type({1\n});
  421.             },,{
  422.                 type({RE } | ResNum |{\n});
  423.             });
  424.             wait(30,{stop},{/E)\n},);
  425.             type({SUB:} | @getchar(IndexLine,30,80) );
  426.             UpBody;
  427.             wait(130,{stop},{\nCCS(N)>},);
  428.             type({SEND ON\n});
  429.             wait(30,{stop},{\nCCS(N)>},); 
  430.         };
  431.         %UpHP{
  432.             %name @head(@getchar(IndexLine,14,8),{ });
  433.             %HPData @tail(@head(hp,{/} | name),{,});
  434.             %HPID   @head(HPData,{/});
  435.             %HPPass @tail(HPData,{/});
  436.  
  437.             GoHP(HPID,HPPass);
  438.  
  439.             type({WRITE\n});
  440.                 wait(30,{stop},{\n:},);
  441.             type(@getchar(IndexLine,30,80) );
  442.                 wait(30,{stop},{\n:},);
  443.             type({1\n});
  444.             wait(30,{stop},{/E)\n},);
  445.             UpBody;
  446.                 wait(130,{stop},{\nHP>},);
  447.         };
  448.         %UpMail{
  449.             GoMail;
  450.  
  451.             type({COM\n});
  452.                 wait(30,{stop},{/E)\n},);
  453.             type({SUB:}| @getchar(IndexLine,30,80));
  454.             type({TO:} | @getchar(IndexLine,14,8) | {\n});
  455.             wait(30,{stop},{\n},);
  456.             /*type({FROM:ハンドル名\n});   ハンドルを入れる場合用 */
  457.             wait(30,{stop},{\n},);
  458.             UpBody;
  459.             wait(130,{stop},{\nMAIL>},); 
  460.         };
  461.  
  462.         var Return[4];
  463.         delfile(SaveFName);
  464.         Return := {No};
  465.         fopen(IndexFName);
  466.         loop({    IndexLine := @fread;
  467.             case(@getchar(IndexLine,1,2),
  468.             {予},{    case(@getchar(IndexLine,8,5),
  469.                     {Forum},UpForum,
  470.                     {HP   },UpHP,
  471.                     {Mail },UpMail);
  472.                 IndexLine := {済} | @getchar(IndexLine,3,80);
  473.                 loop({    write(SaveFName,IndexLine  );
  474.                     IndexLine := @fread;
  475.                     im(IndexLine <> {});
  476.                 });
  477.                 copyfile(SaveFName,IndexFName);
  478.                 Return := {Yes};
  479.                 im({No})
  480.             },{保},{write(SaveFName,IndexLine );
  481.                 im({Yes})
  482.             },{済},{write(SaveFName,IndexLine );
  483.                 im({Yes})
  484.             },,{    im({No})
  485.             })
  486.         });
  487.         fclose;
  488.         im(Return)
  489.     };
  490.  
  491.     /* 前回, アップしたファイル(済)を削除する */
  492.     %DelOldText{
  493.         var AnyWrite[3];
  494.         AnyWrite:={No};
  495.         delfile(SaveFName);
  496.         fopen(IndexFName);
  497.         loop({    IndexLine := @fread;
  498.             case(@getchar(IndexLine,1,2),
  499.             {予},{    write(SaveFName,IndexLine );
  500.                 AnyWrite:={Yes};
  501.                 im({Yes})
  502.             },{保},{write(SaveFName,IndexLine );
  503.                 AnyWrite:={Yes};
  504.                 im({Yes})
  505.             },{済},{%fno @head(@getchar(IndexLine,4,3),{ });
  506.                 delfile( FNameTop | {MES} | fno | {.TXT});
  507.                 im({Yes})
  508.             },,{    im({No})
  509.             })
  510.         });
  511.         fclose;
  512.         case(AnyWrite,
  513.         {Yes},{copyfile(SaveFName,IndexFName)},
  514.         {No} ,{delfile(IndexFName)} )
  515.     };
  516.  
  517.     /* UpText Main */
  518.     case(@filechk(IndexFName),
  519.             {Yes},DelOldText);
  520.  
  521.     case(@filechk(IndexFName),
  522.             {Yes},{    loop(UpOne) });
  523.     };
  524.  
  525. /***********************************************************************
  526. *
  527. * メイン処理       Call Telephone and Send Id ,Password
  528. *
  529. ***********************************************************************/
  530.  
  531.     stopbit(1);
  532.     xon({Yes});
  533.     rscs({Yes});
  534.     click({No});
  535.     nattou({Yes});
  536.     account(logd | {\ACCOUNT.TXT},{NIFTY-Serve});
  537.  
  538.     footnote({NIFTY-Serveへ電話をかけています。});
  539.     callnif;
  540.     footnote({NIFTY-Serveの前処理をしています。});
  541.  
  542.     case(id,{},{
  543.         select({ユーザIDの設定がありません。後は手動で?},10,stop,
  544.         {やります},stop,{電話を切ります},{discon;stop})
  545.     });
  546.  
  547.     wait(20,{stop},{Connection-ID  --->},);
  548.     type({SVC\n});
  549.     wait(20,{stop},{Enter User-ID  --->},);
  550.     type( id | {\n});     /* AAA00000は貴方のユーザIDに変更して下さい */
  551.     wait(20,{stop},{Enter Password --->},);
  552.  
  553.     case(pass,
  554.       {},{    footnote({パスワードをキーボードから入れて下さい});
  555.                    /*パスワードを,直接入力する */
  556.         sendtype({Ch/2});
  557.         chat({Yes});
  558.         wait(300,{stop},{ようこそ},);
  559.         chat({No});
  560.         sendtype({Line});
  561.         footnote({前置きの処理をしています。});
  562.          },
  563.         ,{type(pass | {\n})});
  564.  
  565.     setcdir2(logd);
  566.     delfile( logd |  {\title} | {.log});
  567.     receive(logd |  {\title} | {.log});
  568.     loop({
  569.         wait(30,    {stop},
  570.                  {\n>},            {type({\n});im({Yes})},
  571.                  {NIFTY-Serve     TOP},{im({No})}
  572.             )
  573.     });
  574.     wait(30,{stop},{\n>},); 
  575.     stoprec;
  576.  
  577.             /* read mail  */
  578.     footnote({メールの受信処理をしています。});
  579.     type({MCHECK\n});
  580.     wait(30,    {stop},
  581.          {\n>}, ,
  582.          {未読分},MailDown
  583.         );
  584.  
  585.     case( hp<>{},{Yes},{
  586.         footnote({HPの受信処理をしています。});
  587.         HP          /* read hp */
  588.     });
  589.  
  590.     case( Forum<>{},{Yes},{
  591.         footnote({フォーラムの受信処理をしています。});
  592.         Forum;      /* read forum */
  593.     });
  594.  
  595.     footnote({文書のアップ処理をしています。});
  596.     UpText;        /* Upload Forum,Hp,Mail */
  597.  
  598.         /* 課金情報の表示 */
  599.     footnote({NIFTYの課金情報を参照しています。});
  600.     bill;
  601.  
  602.     footnote({NIFTYの終了処理をしています。});
  603.     type({bye\n});
  604.     wait(30,,{ました。});
  605.     wait(3);
  606.     discon;
  607.     footnote({});
  608.  
  609. };    /* end of autoacc2 */
  610.  
  611.   /* 残り容量を確認してから, autoacc2を行う */
  612. %autoacc{
  613.     case(@diskrem < (50*1024),
  614.         {Yes},{
  615.                    select({このディスクの残り容量(} | (@diskrem / 1024)
  616.                 | {Kbyte)では不足です。}
  617.             ,30,,    {確認},    )
  618.         },{No},autoacc2
  619.     )
  620. };
  621.  
  622. /***********************************************************************
  623. *
  624. *   ダウンロードした,文書を読む処理
  625. *
  626. ***********************************************************************/
  627.  
  628. /***********************************************************************
  629. *
  630. *    フォーラムの会議室, HPの内容, MAILの内容を一覧,表示,選択可能とする。
  631. *      fname : 会議室のログのファイル名
  632. *      type  : Form:ファーラムの会議室ログ
  633. *              HP  : HPのログ
  634. *              Mail:メールのログ
  635. *      ForumN: フォーラム名,HP名
  636. *
  637. ************************************************************************/
  638. %boadmenu
  639. {[fname,type,ForumN]
  640. var linenum[8]; /* 表示中メッセージの行番号(MEMO.1内の一覧での行位置) */
  641.  
  642.       /* タイトルを抜き出して,メモに一行のに入れる処理 */
  643.     %setline {
  644.       var item[92];
  645.       case(type,
  646.       {Forum},{
  647.           item:=@ftell | {  } | @getchar(line,1,3);
  648.           %line2 @fread;
  649.           case(@getchar(line2,27,2),
  650.             {へ},{item:=item | @getchar(line2,23,4)},
  651.                 ,{item:=item | {    }}
  652.           );
  653.           item:=item | @getchar(line,19,80);
  654.           madd(2,item);
  655.     },{HP},{
  656.           item:=@ftell | {  } | @getchar(line,1,3);
  657.           item:=item | { } |@getchar(line,7,14) |
  658.             @getchar(line,23,9) | @getchar(line,37,50);
  659.           madd(2,item);
  660.     },{Mail},{
  661.           item:=@ftell;
  662.           %line2 @fread;
  663.           item:=item | @getchar(line,4,17) | @getchar(line,23,8) |
  664.             @getchar(line,32,6) | { } | @getchar(line2,11,80);
  665.           madd(2,item);
  666.     });
  667.     };
  668.  
  669.     /* オリジナルの題名から, 応答用の題名を作成する関数 */
  670.     %resTitle{[org]
  671.         case(@getchar(org,1,3),
  672.         {Re:},{im( {Re*2:} | @getchar(org,4,80) )},
  673.         {re:},{im( {Re*2:} | @getchar(org,4,80) )},
  674.         {RE:},{im( {Re*2:} | @getchar(org,4,80) )},
  675.         {Re*},{ %after @getchar(org,4,80);
  676.             %num @head(after,{:});
  677.             im( {Re*} | (num+1) | {:} |
  678.                 @body(after,{:},) )
  679.             },
  680.              ,{im( {Re:} | org )}
  681.         )
  682.     };
  683.  
  684.     /* 送信用の文書を,制御ファイルに登録する */
  685.     %SetIndex{
  686.        var fno[5];
  687.        var IndexLine[82];
  688.        var Wtitle[82];
  689.        var Wtitle2[82];
  690.            %Wtype 
  691.            @select({このメッセージを送信予約しますか?。}
  692.             ,99999,{},
  693.             {送信予約する},            {im({予})},
  694.             {送信予約しないが保存する},    {im({保})},
  695.             {保存しないで捨てる。},        {im({捨})},
  696.             {再度,編集に戻る。},        {im({戻})}
  697.             );
  698.         case(Wtype , 
  699.         {捨},{im(Wtype)},
  700.         {戻},{im(Wtype)},
  701.          ,{  /* Wtype = 0 or Wtype = 1 */
  702.         %Line @memo(2,linenum,1);
  703.         case(type,
  704.         {Forum},{
  705.             IndexLine := {Forum:} | 
  706.                 @getchar(ForumN|{       },1,8) | {/} |
  707.                        @head(@tail(fname,{MES}),{.}) | {/} |
  708.                 @getchar(Line,11, 3) ;
  709.                    Wtitle := @getchar(Line,38,80);
  710.         },{HP},{
  711.             IndexLine := {HP   :} | 
  712.                 @getchar(ForumN|{       },1,8) |
  713.                        {       };
  714.                    Wtitle := @getchar(Line,39,80);
  715.         },{Mail},{
  716.             IndexLine := {Mail :} | 
  717.                 @getchar(Line,26,8) |
  718.                        {       };
  719.                    Wtitle := @getchar(Line,41,80);
  720.         });
  721.         Wtitle := @resTitle(Wtitle);
  722.         loop({
  723.             Wtitle2 :=@input({題名を入れて下さい。},,Wtitle) ;
  724.             case(@nochar(Wtitle2)>40,{Yes},{
  725.             footnote({題名は, 全角20文字までです});
  726.             im({Yes})
  727.             },,{im({No})
  728.             });
  729.         });
  730.         footnote({});
  731.         Wtitle := @case( Wtitle2 , {} ,{im(Wtitle)},
  732.                           ,{im(Wtitle2 | {\n})});
  733.  
  734.                fno := 0;
  735.         mkdir(logd , {UP});
  736.         %nametop logd | {\UP\};
  737.                loop({ fno := fno+1;
  738.                 filechk(nametop | {MES} | fno | {.txt})
  739.                });
  740.         fno := @getchar(fno | {   },1,3);
  741.  
  742.         IndexLine := Wtype | { } | fno | { } | IndexLine |
  743.             {:} | Wtitle ;
  744.  
  745.         write( nametop | {INDEX.TXT}, IndexLine);
  746.  
  747.         im( nametop | {MES} | fno | {.txt});
  748.         })
  749.     };
  750.  
  751.   /* メッージを上半分に表示,下半分でコメント書けるようにする
  752.            メモ3がメッセージ, メモ4がコメント   */
  753.     %responce{
  754.         CloseAllMemo;
  755.                mopen(3,0,21,639,250); /* 見るだけの 画面 */
  756.                mclose(1);
  757.         madd(4,{});
  758.                mset(4,{w});
  759.                mopen(4,0,251,639,459); /* コメント用 画面 */
  760.                footnote({終了},{b});
  761.                loop(  {waitx(1000);
  762.                       im(@xtype!=2 && @xtype!=101 && @xtype!=201)
  763.                });
  764.         case(@memo(4) <> {},
  765.         {Yes},{
  766.             %OutFile @SetIndex;
  767.             CloseAllMemo;
  768.                    mset(4,{n});
  769.                 case(OutFile , 
  770.                 {捨},{},
  771.                 {戻},responce,
  772.                      ,{mwrite(OutFile,4)}
  773.             );
  774.         },,{
  775.             CloseAllMemo;
  776.                    mset(4,{n});
  777.         })
  778.     };
  779.  
  780.  
  781.   /* メッセージはメモ2を使用して表示, PF2で前, PF3で後, PF1で終了する。*/
  782.     %dispone{
  783.       var cont[4];
  784.       loop({  cont := {Yes};
  785.               %st @getchar(@memo(2,linenum,1),1,8);
  786.               %len @getchar(@memo(2,linenum+1,1),1,8)-st;
  787.               case( len > 0 ,
  788.                {Yes},{
  789.                   mclear(3);
  790.             mclear(4);
  791.                       mread(fname,3,st,len);
  792.                       mset(3,{r});
  793.                       mopen(3,0,21,639,459); /* 見るだけの画面 */
  794.                       footnote({終了 前  次 応答},
  795.                             {b});
  796.                       loop(  {waitx(1000);
  797.                         im(@xtype<100)
  798.                       });
  799.                       case( @xtype,
  800.                         101, {cont := {No}},
  801.                         201, {cont := {No}},
  802.                         102, {linenum := linenum-1},
  803.                         202, {linenum := linenum-1},
  804.                         103, {linenum := linenum+1},
  805.                         203, {linenum := linenum+1},
  806.                         104, {responce},
  807.                         204, {responce}  
  808.             );
  809.                       case(@mcheck != 0, {Yes}, { mclose(3) });
  810.                       CloseAllMemo;
  811.                });
  812.                im( cont && len>0)
  813.        });
  814.        mset(3,{n})
  815.     };
  816.  
  817.   /* メッセージのタイトルを読みこみ,メモ1にタイトル一覧を作成する */
  818.     mclear(2);
  819.     madd(2,{99999999 } |
  820.       {★表示したいメッセージを左ダブルクリック}|
  821.       {(又はカーソル移動+PF2)してね★\n});
  822.     fopen(fname);
  823.         /* 「/」の位置で,タイトル行を見分けます。 */
  824.     %sulashP @case(type,    {Forum},{im(4)},
  825.                 {HP},    {im(9)},
  826.                 {Mail},    {im(35)} );
  827.     footnote({ログの取り出しをしています。ちょっと,お待ちを!});
  828.     loop({
  829.         %line @fread(sulashP,{/});
  830.         setline;
  831.         im(line <> {})
  832.     });
  833.     fclose;
  834.     
  835.   /* 一覧を表示し,メッセージを選択してもらう */
  836.     linenum:=0;
  837.     mset(2,{r});
  838.     loop({
  839.       mopen(2,0,21,639,459);
  840.       curline(linenum);
  841.       footnote({終了表示},{b});
  842.       loop({waitx(1000);
  843.             im(@xtype!=2 && @xtype<100)
  844.       });
  845.       linenum := @xlinenum;
  846.       case(@xtype,
  847.           2,{ 
  848.           CloseAllMemo;
  849.               dispone; /* 選択されたメッセージの表示 */
  850.               im({Yes})},
  851.         101,{im({No}) },
  852.         102,{ 
  853.           CloseAllMemo;
  854.               dispone; /* 選択されたメッセージの表示 */
  855.               im({Yes})},
  856.         201,{im({No}) },
  857.         202,{ 
  858.           CloseAllMemo;
  859.               dispone; /* 選択されたメッセージの表示 */
  860.               im({Yes})}
  861.       )
  862.     });
  863.     case(@mcheck != 0, {Yes}, { mclose(3) });
  864.     CloseAllMemo;
  865.     mset(2,{n});
  866.     
  867. }; /* end of log menu */
  868.  
  869. %dispFile{[filename]
  870.     case(@filechk(filename),{Yes},{
  871.         mclear(2);
  872.         mread(filename,2);
  873.         mset(2,{r});
  874.         mopen(2,0,21,639,459);
  875.         footnote({終了},{b});
  876.         loop({waitx(1000);
  877.                 im(@xtype!=2 && @xtype<100)
  878.         });
  879.         case(@mcheck != 0, {Yes}, { mclose(3) });
  880.         mset(2,{n})
  881.     },{No},{
  882.         select({受信済みのファイルがありません。},10,{},{確認},)
  883.     })
  884. };
  885.  
  886.  
  887.  
  888. %readdoc{
  889. var boadnum[10];
  890.     %setdocm{
  891.     var f2[1000];
  892.     %oneHP{[name]
  893.         %name2 @getchar(name | {       },1,8);
  894.         madd(1,{<}|name2|{> HPの最新オープンニング\n});
  895.         madd(1,{<}|name2|{> HPの内容              \n});
  896.         case(@filechk( logd |  {\HP\} | fname | {.USR}),{Yes},{
  897.             madd(1,{<}|name2|{> HPの最近の参照者\n})
  898.         })
  899.     };
  900.     %oneBoad{
  901.         %line @fread(23,{/});
  902.         case(line<>{},{Yes},{
  903.               madd(1, {<} | name2 | {> フォーラム } |
  904.                  @getchar(line,1,2) |
  905.                 { 会議室 :} | 
  906.                 @getchar(line,29,80) );
  907.             im({Yes})   /* return Yes for continue    */
  908.         },{No},{im({No})})  /* return No  for end of file */
  909.     };
  910.     %oneForum{[name]
  911.         %name2 @getchar(name | {       },1,8);
  912.         madd(1,{<}|name2|{> フォーラムのオープンニング\n});
  913.         fopen( logd | {\} | name | {\title} | {.log});
  914.         loop({oneBoad});
  915.         fclose;
  916.     };
  917.  
  918.     /* setdocm main start */
  919.     mclear(1);
  920.     madd(1,{  ★  読みたい物を左ダブルクリック}|
  921.            {(又はカーソル移動+PF2)で選択して下さい ★ \n});
  922.     case(@filechk( logd |  {\TITLE.LOG}),
  923.         {Yes},{ madd(1,{             }|
  924.             {最新のNifty オープニングメッセージ \n})});
  925.     case(@filechk( logd |  {\BILL.LOG}),
  926.         {Yes},{ madd(1,{             }|
  927.             {最新のNifty 課金情報(3か月分文)\n})});
  928.     case(@filechk( logd |  {\ACCOUNT.TXT}),
  929.         {Yes},{ madd(1,{             }|
  930.             {アクセス履歴情報\n})});
  931.     case(@filechk(logd | {\MAIL\MAIL.LOG}),
  932.         {Yes},{    madd(1,{             }|
  933.             {受信したメールの内容 \n})});
  934.  
  935.     f2 := hp;
  936.     loop({
  937.         %fname @tail(@head(f2,{,}),{/});
  938.         f2 := @body(f2,{,});
  939.         case(@filechk( logd |  {\HP\} | fname | {.TLT}),
  940.             {Yes},{oneHP(  fname )});
  941.         im( f2 <> {} )
  942.     });
  943.  
  944.     f2 := forum;
  945.     loop({
  946.         %fname @head(f2,{,});
  947.         f2 := @body(f2,{,});
  948.         case(@filechk( logd |  {\} | fname | {\title} | {.log}),
  949.             {Yes},{oneForum(  fname )});
  950.         im( f2 <> {} )
  951.     });
  952.     }; /* end of setdocm */
  953.  
  954.     %dispboad{
  955.     %line @memo(1,boadnum,1);
  956.         %type @getchar(line,14,14);
  957.         %name @getchar(line,3,8);
  958.     case(type,
  959.     {最新のNifty オ},{dispFile( logd |  {\TITLE.LOG})},
  960.     {最新のNifty 課},{dispFile( logd |  {\BILL.LOG})},
  961.     {アクセス履歴情},{dispFile( logd |  {\ACCOUNT.TXT})},
  962.     {受信したメール},{
  963.         %filename logd | {\MAIL\MAIL.LOG};
  964.         case(@filechk(filename),{Yes},{boadmenu(filename,{Mail},name)},
  965.             ,{select(
  966.             {受信済のメールがありません。},10,{},{OK?},)
  967.             })
  968.     },
  969.     {HPの最新オープ},{dispFile( logd | {\HP\} | name | {.TLT})},
  970.     {HPの内容      },{
  971.         %filename logd | {\HP\} | name | {.LOG};
  972.         case(@filechk(filename),{Yes},{boadmenu(filename,{HP},name)},
  973.             ,{select({このHPには}|
  974.             {受信済のメッセージがありません。},10,{},{OK?},)
  975.             })
  976.     },
  977.     {HPの最近の参照},{dispFile( logd | {\HP\} | name | {.USR})},
  978.     {フォーラムのオ},{dispFile( logd | {\} | name | {\TITLE.LOG})},
  979.     /*会議室*/     ,{
  980.         case(@getchar(line,14,10),{フォーラム},{
  981.         %num @case(@getchar(line,25,1),
  982.                 { },{im({0}|@getchar(line,26,1))},
  983.                    ,{getchar(line,25,2)}
  984.         );
  985.         %filename logd | {\} | name | {\} |
  986.                     {MES} | num | {.LOG};
  987.         case(@filechk(filename),{Yes},{boadmenu(filename,{Forum},name)},
  988.             ,{select({この会議室には,}|
  989.             {受信済のメッセージがありません。},10,{},{OK?},)
  990.             })
  991.         })
  992.     }) /* end of case */
  993.  
  994.     };
  995.  
  996. footnote({受信文書の一覧を作成中です。});
  997. setdocm;
  998. mset(1,{r});
  999. boadnum :=0;
  1000. loop({
  1001.   mopen(1,0,21,639,459);
  1002.   curline(boadnum);
  1003.   footnote({終了表示},{b});
  1004.   loop(  {waitx(1000);
  1005.           im(@xtype!=1 && @xtype<100)
  1006.          }
  1007.   );
  1008.   boadnum := @xlinenum;
  1009.   case(@xtype,
  1010.       1,{ CloseAllMemo;
  1011.           dispboad;
  1012.           im({Yes})
  1013.     },
  1014.     101,{ im({No}) },
  1015.     102,{ CloseAllMemo;
  1016.           dispboad;
  1017.           im({Yes})
  1018.     },
  1019.     201,{ im({No}) },
  1020.     202,{ CloseAllMemo;
  1021.           dispboad;
  1022.           im({Yes})
  1023.     },
  1024.        ,{ CloseAllMemo;
  1025.           im({Yes})
  1026.     }
  1027.   )
  1028. });
  1029. case(@mcheck != 0, {Yes}, { mclose(3) });
  1030. CloseAllMemo;
  1031. mset(2,{n});
  1032. mset(1,{n});
  1033. footnote({});
  1034.  
  1035. }; /* end of read doc */
  1036.  
  1037. /************************************************************************
  1038. *
  1039. *         送信文書の作成/更新処理
  1040. *
  1041. *************************************************************************/
  1042. %senddoc{
  1043.     var IndexLine[82];
  1044.     %FNameTop logd | {\UP\};
  1045.     %IndexFName FNameTop | {INDEX.TXT}; /* 制御ファイル */
  1046.     %SaveFName FNameTop | {SAVE.TXT};   /* 作業用のファイル*/
  1047.  
  1048.       /* set destination (21byte) 
  1049.                                         */
  1050.     %SetDest{
  1051.     %DestMail{
  1052.         %name @input({送信先のIDを入れて下さい。}) ;
  1053.         case( @nochar(name)!=8,{Yes},{
  1054.             footnote({「}|name|{」は 英数字8文字でありません});
  1055.             DestMail
  1056.         },,{
  1057.             footnote({});
  1058.             im({Mail :} | name | {       })
  1059.         })
  1060.     };
  1061.  
  1062.     %DestHP{
  1063.         %name @input({HPの名前を入れて下さい。}) ;
  1064.         case( hp = @head(hp,{/}|name),{Yes},{
  1065.             footnote({「}|name|{」は 登録されていません});
  1066.             DestHP
  1067.         },,{
  1068.             footnote({});
  1069.             im({HP   :} | @getchar(name|{       },1,8)
  1070.              | {       })
  1071.         })
  1072.     };
  1073.  
  1074.     %DestForum{
  1075.         var boad[10];
  1076.         var org[10];
  1077.         %name @input({フォーラムの名前を入れて下さい。}) ;
  1078.         case( forum = @head(forum,name),{Yes},{
  1079.             footnote({「}|name|{」は 登録されていません});
  1080.             DestForum
  1081.         },,{
  1082.             %ans @input({「会議室番号」又は「会議室番号,コメント先」}) ;
  1083.             case(ans=@head(ans,{,}),
  1084.             {Yes},{    boad:=ans+0;
  1085.                 org :={   }
  1086.             },{No},{boad:=@head(ans,{,})+0;
  1087.                 org :=@head(ans,{,})+0
  1088.             });
  1089.             case( boad<1 || boad>20 ||
  1090.                 (org<>{   }) && (org<1 || org>999),
  1091.             {Yes},{
  1092.                 footnote({会議室番号, コメント先がおかしいです});
  1093.                 DestForum;
  1094.             },,{
  1095.                 footnote({});
  1096.                 case(@nochar(boad),1,{boad:={0}|boad});
  1097.                 case(@nochar(org), 1,{org:={00}|org},
  1098.                            2,{org:={0} |org});
  1099.                 im({Forum:} | 
  1100.                     @getchar(name|{       },1,8) | {/} |
  1101.                            boad | {/} | org ) 
  1102.             });
  1103.         })
  1104.     };
  1105.     
  1106.     select({何に使いますか?}
  1107.         ,99999,{im({})},
  1108.         {  メール  },             DestMail,
  1109.         {  HPへのアップ  },         DestHP,
  1110.         {  会議室へのアップ  },        DestForum,
  1111.         {  メインメニューに戻る },    {im({})});
  1112.     };
  1113.  
  1114.     %ChgIndex{[Proc]
  1115.     var WorkLine[82];
  1116.     delfile(SaveFName);
  1117.     fopen(IndexFName);
  1118.     loop({    WorkLine := @fread;
  1119.         case(@getchar(IndexLine,4,3) = @getchar(WorkLine,4,3),
  1120.         {No},{    write(SaveFName,WorkLine );
  1121.             im({Yes})
  1122.         },{Yes},{ Proc;
  1123.             im({Yes})
  1124.         });
  1125.         im(WorkLine<>{})
  1126.     });
  1127.     fclose;
  1128.     copyfile(SaveFName,IndexFName);
  1129.     };
  1130.  
  1131.     %DelDoc{
  1132.     ChgIndex({
  1133.         %fno @head(@getchar(IndexLine,4,3),{ });
  1134.         delfile( FNameTop | {MES} | fno | {.TXT});
  1135.     })
  1136.     };
  1137.  
  1138.     %SetDoc{[type]
  1139.     ChgIndex({
  1140.         IndexLine := type | @getchar(IndexLine,3,80);
  1141.         write(SaveFName,IndexLine  );
  1142.     })
  1143.     };
  1144.  
  1145.     %SetTDoc{
  1146.     %Wtitle  @getchar(IndexLine,30,40);
  1147.     %Wtitle2 @input({題名を入れて下さい。},,Wtitle) ;
  1148.     case( Wtitle2 <>{} && (Wtitle2 | {\n})<>Wtitle,{Yes},{
  1149.         ChgIndex({
  1150.             IndexLine := @getchar(IndexLine,1,29) |
  1151.                 Wtitle2 | {\n};
  1152.             write(SaveFName,IndexLine  );
  1153.         })
  1154.     })
  1155.     };
  1156.  
  1157.     %SetDDoc{
  1158.     %Dest @SetDest;
  1159.     case( Dest<>{} && Dest<>@getchar(IndexLine,8,21),{Yes},{
  1160.         ChgIndex({
  1161.             IndexLine := @getchar(IndexLine,1,7) |
  1162.                 Dest | @getchar(IndexLine,29,80);
  1163.             write(SaveFName,IndexLine  );
  1164.         })
  1165.     })
  1166.     };
  1167.  
  1168.     %UpdDoc{
  1169.     %fno @head(@getchar(IndexLine,4,3),{ });
  1170.     %fname   FNameTop | {MES} | fno | {.TXT};
  1171.     mclear(2);
  1172.     mread(fname,2);
  1173.            mset(2,{w});
  1174.     mopen(2,0,21,639,459);
  1175.            footnote({更新破棄},{b});
  1176.            loop(  {waitx(1000);
  1177.                   im(@xtype!=2 && @xtype!=101 && @xtype!=201 &&
  1178.                 @xtype!=102 && @xtype!=202)
  1179.            });
  1180.     %endtype @xtype;
  1181.     CloseAllMemo;
  1182.            mset(2,{n});
  1183.     case( endtype==101 || endtype==201,{Yes},{
  1184.         mwrite(fname,2)
  1185.     })
  1186.     };
  1187.  
  1188.     %OneDoc{
  1189.     case(IndexLine<>{},{Yes},{
  1190.             CloseAllMemo;
  1191.         select({どういう処理を行いますか? :}|
  1192.                 @head(@getchar(IndexLine,30,40),{\n})
  1193.             ,99999,{},
  1194.             {  削除する  },         DelDoc,
  1195.             {  送信を保留しておく  },    {SetDoc({保})},
  1196.             {  次回の送信を予約する  },     {SetDoc({予})},
  1197.             {  題名を変更する },        SetTDoc,
  1198.             {  あて先を変更する },        SetDDoc,
  1199.             {  文書内容を変更する },    UpdDoc,
  1200.             {  何もしないで戻る },        )
  1201.     })
  1202.     
  1203.     };
  1204.  
  1205.     %OldDoc{
  1206.     
  1207.     case(@filechk(IndexFName),
  1208.     {No},{
  1209.         select({作成済の送信文書がありません。}
  1210.             ,20,{},    {  確認  },     ,)
  1211.     },{Yes},{
  1212.         loop({
  1213.           mclear(1);
  1214.           mread(IndexFName,1);
  1215.           mset(1,{r});
  1216.           mopen(1,0,21,639,459);
  1217.           footnote({終了選択},{b});
  1218.           loop(  {waitx(1000);
  1219.                   im(@xtype!=1 && @xtype<100)
  1220.                  }
  1221.           );
  1222.           IndexLine := @memo(1,@xlinenum,1);
  1223.           case(@xtype,
  1224.               1,{ 
  1225.                 OneDoc;
  1226.                 im({Yes})},
  1227.             102,{ 
  1228.             OneDoc;
  1229.                 im({Yes})},
  1230.             202,{ 
  1231.             OneDoc;
  1232.                 im({Yes})},
  1233.             101,{im({No}) },
  1234.             201,{im({No}) },
  1235.                ,{CloseAllMemo;
  1236.                  im({Yes}) }
  1237.           )
  1238.         });
  1239.         case(@mcheck != 0, {Yes}, { mclose(3) });
  1240.         CloseAllMemo;
  1241.         mset(2,{n});
  1242.         mset(1,{n});
  1243.         footnote({});
  1244.  
  1245.     })
  1246.     }; /* end of Old Doc */
  1247.  
  1248.     %NewDoc2{[Dest,Title]
  1249.     var fno[10];
  1250.     var endtype[3];
  1251.     madd(1,{});
  1252.     mclear(2);
  1253.     madd(2,{});
  1254.            mset(2,{w});
  1255.     mopen(2,0,21,639,459);
  1256.     loop({
  1257.                footnote({終了},{b});
  1258.                loop(  {waitx(1000);
  1259.                       im(@xtype!=2 && @xtype!=101 && @xtype!=201)
  1260.                });
  1261.         footnote({});
  1262.         endtype :=@select({このメッセージを送信予約しますか?。}
  1263.                 ,99999,{},
  1264.                 {送信予約する},            {im({予})},
  1265.                 {送信予約しないが保存する},    {im({保})},
  1266.                 {保存しないで捨てる。},        {im({捨})},
  1267.                 {再度,編集に戻る。},        {im({戻})}
  1268.                 );
  1269.         im(endtype = {戻})
  1270.     });
  1271.     CloseAllMemo;
  1272.            mset(2,{n});
  1273.     case( endtype={予} || endtype={保}   ,{Yes},{
  1274.                fno := 0;
  1275.         mkdir(logd , {UP});
  1276.                loop({ fno := fno+1;
  1277.                 filechk(FNameTop | {MES} | fno | {.txt})
  1278.                });
  1279.         fno := @getchar(fno | {   },1,3);
  1280.  
  1281.         IndexLine := endtype | { } | fno | { } | Dest |
  1282.             {:} | Title | {\n};
  1283.         write( IndexFName , IndexLine);
  1284.         %fname   FNameTop | {MES} | fno | {.TXT};
  1285.         mwrite(fname,2);
  1286.     });
  1287.     
  1288.     }; /* end of New Doc2 */
  1289.  
  1290.     %NewDoc{
  1291.     var Title[82];
  1292.     %Dest @SetDest;
  1293.     case(Dest<>{},{Yes},{
  1294.         loop({
  1295.             Title :=@input({題名を入れて下さい。});
  1296.             case(@nochar(Title)>40,{Yes},{
  1297.             footnote({題名は, 全角20文字までです});
  1298.             im({Yes})
  1299.             },,{im({No})
  1300.             });
  1301.         });
  1302.         footnote({});
  1303.         case(Title<>{},{Yes},{
  1304.             NewDoc2(Dest,Title);
  1305.         })
  1306.     })
  1307.     };
  1308.  
  1309.     /* senddoc main start */
  1310.     select({どういう処理を行いますか?}
  1311.     ,99999,{},
  1312.     {  既存の送信文書の再処理  },     OldDoc,
  1313.     {  新しい送信文書の作成  },    NewDoc,
  1314.     {  メインメニューに戻る。  },     {} )
  1315.     
  1316. }; /* end of senddoc */
  1317.  
  1318. /************************************************************************
  1319. *
  1320. *         設定処理ルーチン群
  1321. *
  1322. *************************************************************************/
  1323. %setat{
  1324.     var type[10];
  1325.         type := @select({どういうタイプのモデムですか?}
  1326.     ,99999,{},
  1327.     {  1200                   MNPなし  },     {im({1200n})},
  1328.     {  2400                   MNPなし  },    {im({2400n})},
  1329.     {  2400(端末速度2400)     MNPあり  },    {im({2400m})},
  1330.     {  2400(端末速度4800)     MNPあり  },    {im({4800m})},
  1331.     {  2400以上(端末速度9600以上) MNPあり  },    {im({9600m})},
  1332.       );
  1333.     case(type,{},{type:={1200n}});
  1334.     
  1335.     %a @input({ATコマンド設定して下さい。例「ATX3\N3\V1\Q3\J0」},,
  1336.         {AT}|@head(modem,{/}));
  1337.     case(a<>{},{Yes},{
  1338.         case(@getchar(a,1,2),
  1339.         {AT},{
  1340.             case( a = @head(a,{\}),
  1341.             {Yes},{modem:=@getchar(a,3,999)|{/}|@getchar(a,3,999)|
  1342.                 {/AT直接指定_}|type;
  1343.             },,{   modem:=@getchar(a,3,999)|{/}|
  1344.                 {/AT直接指定_}|type;
  1345.             });
  1346.         },
  1347.             ,{setat});
  1348.     });
  1349. };
  1350.  
  1351. %setmodem{
  1352.     select({モデムの機種を選んで下さい。現在は「} |
  1353.         @head(@tail(modem,{/}),{_}) | {」です。}
  1354.     ,99999,{},
  1355.     {変更しない},{},
  1356.     {内蔵1200},         {modem :={X3//内蔵1200_1200n} },
  1357.     {内蔵2400},        {modem :={X3/\N3\V1\Q3\J0/内蔵2400_9600m} },
  1358.     {富士通 PM1200},     {modem :={X3//PM1200_1200n} },
  1359.     {富士通 PM2400},    {modem :={X3/\N3\V1\Q3\J0/PM2400_9600m} },
  1360.     {AIWA PV-A1200},    {modem :={X3//PV-A1200_1200n} },
  1361.     {AIWA PV-A2400},    {modem :={X3//PV-A2400_2400n} },
  1362.     {AIWA PV-A24MNP5},    {modem :={X3&D2/\N3\Q3\J0/PV-A24MNP5_9600m} },
  1363.     {AIWA PV-A24V42},    {modem :={X3&D2/\N3\Q3\J0/PV-A24V42_9600m} },
  1364.     {EPSON SR-120S},    {modem :={X3//SR-120S_1200n} },
  1365.     {EPSON SR-240AT},    {modem :={X3//SR-240AT_2400n} },
  1366.     {OMRON MD1200},        {modem :={X3//MD1200_1200n} },
  1367.     {OMRON MD12FS},        {modem :={X3//MD12FS_1200n} },
  1368.     {OMRON MD2400F},    {modem :={X3/\N3\V1\Q2\J0/MD2400F_2400m} },
  1369.     {OMRON MD24FS4},    {modem :={X3/\N3\Q2\J0/MD24FS4_2400m} },
  1370.     {OMRON MD24FP4},    {modem :={X3/\N3\Q2\J0/MD24FP4_2400m} },
  1371.     {OMRON MD24FS5},    {modem :={X3/\N3\Q2\J0/MD24FS5_2400m} },
  1372.     {OMRON MD24FS7},    {modem :={X3/\N3\Q2\J0/MD24FS7_2400m} },
  1373.     {NEC COMSTAR 2424},    {modem :={X3/\N3\Q2/COMSTAR 24_2400m} },
  1374.     {ATコマンド直設定},    {setat}
  1375.     )
  1376.  
  1377. };
  1378.  
  1379. %settelno{
  1380.     %a @input({近くのNiftyの電話番号を設定して下さい。例「0559235038」},,
  1381.         telno);
  1382.     case(a<>{},{Yes},{telno := a});
  1383. };
  1384.  
  1385. %settelty{
  1386.     %name @case(telty,
  1387.         {1200},{im({1200 ROAD1})},
  1388.         {2400},{im({2400 ROAD1})},
  1389.         {2400T},{im({2400 ROAD2})},
  1390.               ,{im({設定なし})} );
  1391.     select({アクセス・ポイントのタイプを選んで下さい。現在は「}|name|{」です。}
  1392.     ,99999,{},
  1393.     {   変更しない  },{},
  1394.     {  回線速度=1200 ROAD1  },     {telty :={1200} },
  1395.     {  回線速度=2400 ROAD1  },    {telty :={2400} },
  1396.     {  回線速度=2400 ROAD2  },     {telty :={2400T} } )
  1397.     
  1398. };
  1399.  
  1400. %setline{
  1401.     %name @case(line,
  1402.         {T},{im({プッシュ回線})},
  1403.         {P},{im({ダイヤル回線})},
  1404.               ,{im({設定なし})} );
  1405.     select({電話回線のタイプを選んで下さい。現在は「}|name|{」です。}
  1406.     ,99999,{},
  1407.     {   変更しない  },{},
  1408.     {  プッシュ回線  },     {line :={T} },
  1409.     {  ダイヤル回線  },    {line :={P} })
  1410.     
  1411. };
  1412.  
  1413. %setlogd2{
  1414.     %setlogd2{[old]
  1415.         %a @input({この格納先は今,使用できませんが?。 例「B:」},,
  1416.             old);
  1417.         case(a<>{},{Yes},{
  1418.             case(@setcdir2(a),{Yes},{logd := a},
  1419.                            ,{setlogd2(a)})
  1420.         })
  1421.     };
  1422.  
  1423.     %a @input({受信データの格納先を設定して下さい。例「B:」,「C:\NIF」},,
  1424.         logd);
  1425.     case(a<>{},{Yes},{
  1426.         case(@setcdir2(a),{Yes},{logd := a},
  1427.                        ,{setlogd2(a)})
  1428.     })
  1429. };
  1430.  
  1431. %setlogd{
  1432.     %cur @case(logd,
  1433.         {A:},{im({0番のフロッピー(A:)})},
  1434.         {B:},{im({1番のフロッピー(B:)})},
  1435.         {D:},{im({ハードディスク (D:)})},
  1436.         {E:},{im({ハードディスク (E:)})},
  1437.         {F:},{im({ハードディスク (F:)})},
  1438.         {G:},{im({ハードディスク (G:)})},
  1439.             ,{im({パスの直接設定})}
  1440.     );
  1441.     select({文書を格納する装置は?。現在は「} | cur | {」}
  1442.     ,99999,{},
  1443.     {変更しない},{},
  1444.     {0番のフロッピー(A:)},    {logd :={A:} },
  1445.     {1番のフロッピー(B:)},    {logd :={B:} },
  1446.     {ハードディスク (D:)},    {logd :={D:} },
  1447.     {ハードディスク (E:)},    {logd :={E:} },
  1448.     {ハードディスク (F:)},    {logd :={F:} },
  1449.     {ハードディスク (G:)},    {logd :={G:} },
  1450.     {パスを直接入力する},    {setlogd2}
  1451.     )
  1452.  
  1453. };
  1454.  
  1455.  
  1456. %setid{
  1457.     %setid2{[old]
  1458.         %a @input({ユーザIDは8文字です。 例「BBB00123」},,
  1459.             old);
  1460.         case(a<>{},{Yes},{
  1461.             case(@nochar(a)=8,{Yes},{id := a},
  1462.                            ,{setid2(a)})
  1463.         })
  1464.     };
  1465.  
  1466.     %a @input({NiftyのユーザIDを設定して下さい。例「AAA00321」},,
  1467.         id);
  1468.     case(a<>{},{Yes},{
  1469.         case(@nochar(a)=8,{Yes},{id := a},
  1470.                        ,{setid2(a)})
  1471.     })
  1472. };
  1473.  
  1474. %setpass{
  1475.     %setpassn{
  1476.     %setpass2{[old]
  1477.         %a @input({パスワードは8文字以下です。 例「MIKENEKO」},,
  1478.             old);
  1479.         case(a<>{},{Yes},{
  1480.             case(@nochar(a)<=8,{Yes},{pass := a},
  1481.                            ,{setpass2(a)})
  1482.         })
  1483.     };
  1484.  
  1485.     %a @input({Niftyのパスワードを設定して下さい。例「POCHIINU」},,
  1486.         pass);
  1487.     case(a<>{},{Yes},{
  1488.         case(@nochar(a)<=8,{Yes},{pass := a},
  1489.                        ,{setpass2(a)})
  1490.     })
  1491.     };
  1492.           /* setapass 本体 */
  1493.     %name @case(pass,
  1494.         {},{im({アクセス時に入力})},
  1495.           ,{im({予め設定済})} );
  1496.     select({パスワードを設定しておきますか?。現在は「}|name|{」です。}
  1497.     ,99999,{},
  1498.     {   変更しない  },{},
  1499.     {  他の人が使うので,アクセス時に入力する  },     {pass :={} },
  1500.     {  専用なので,予め設定しておく   },    {setpassn })
  1501.     
  1502. };  /* end of setpass */
  1503.  
  1504. %setforum{
  1505.     var dispOne[1000];
  1506.     %checkForum{[text]
  1507.         %topname @head(text,{,});
  1508.         case(@nochar(topname)<=8,
  1509.             {Yes},{
  1510.                 case(topname ,
  1511.                     text,{im({Yes})},
  1512.                         ,{checkForum(@body(text,{,}))})
  1513.             },,{
  1514.                 footnote({「} | topname | {」は8文字以上です});
  1515.                 im({No})
  1516.         })
  1517.     };
  1518.  
  1519.     dispOne := forum;
  1520.     loop({
  1521.         %a @input({巡回するフォーラムを「,」で区切って, 設定して下さい。\n}|
  1522.               {                               例「FTOWNS1,FFMHOB」},,
  1523.             dispOne);
  1524.         case(a<>{},{Yes},{
  1525.             dispOne := a;
  1526.             case(@checkForum(a),{Yes},{ forum:=a; im({No}) },
  1527.                               ,{           im({Yes}) })
  1528.         },,{im({No})
  1529.         })
  1530.     });
  1531.     footnote({});
  1532. };
  1533.  
  1534. %sethp{
  1535.     var dispOne[1000];
  1536.     %checkHP{[text]
  1537.         %topname @head(text,{,});
  1538.         %id     @head(topname,{/});
  1539.         %pass     @body(topname,{/},{/});
  1540.         %hpname @tail(topname,{/});
  1541.         case(@nochar(id)==8 && @nochar(pass)<=8 && @nochar(hpname)<=8,
  1542.             {Yes},{
  1543.                 case(topname ,
  1544.                     text,{im({Yes})},
  1545.                         ,{checkHP(@body(text,{,}))})
  1546.             },,{
  1547.                 footnote({「} | topname | {」は文字数が合いません。});
  1548.                 im({No})
  1549.         })
  1550.     };
  1551.  
  1552.     dispOne := hp;
  1553.     loop({
  1554.         %a @input({巡回するHPを設定して下さい。\n\n}|
  1555.              {  形式「ID/パスワード/名前,ID2/パスワード2/名前2,,,」\n}|
  1556.              {    ID:HP主催者のID パスワード:HPのパスワード \n}|
  1557.              {    名前:英字8文字以下の名前(任意の識別名)\n\n}|
  1558.              {   例「PFF00570/HACHIKOU/MOPROOM,}|
  1559.                            {KKK00123/AKITAKEN/FUFUFU」},,
  1560.             dispOne);
  1561.         case(a<>{},{Yes},{
  1562.             dispOne := a;
  1563.             case(@checkHP(a),{Yes},{ hp:=a; im({No}) },
  1564.                            ,{        im({Yes}) })
  1565.         },,{im({No})
  1566.         })
  1567.     });
  1568.     footnote({});
  1569. };
  1570.  
  1571. %setupplt{
  1572.     %putplp{[id,data]
  1573.         write(fname, id | @xc({09}) | {:=} | @xc({7b}) |
  1574.             data | @xc({7d}) | {;\n})
  1575.     };
  1576.    var loopon[5];
  1577.    loop({
  1578.     loopon := {Yes};
  1579.     select({設定する項目を選択して下さい。},99999,{},
  1580.         {設定処理を終了する},                {loopon:={No}},
  1581.         {タウンズに接続したモデムの種類(会社名,機種名)},{setmodem},
  1582.         {最寄りのNiftyのアクセスポイントの電話番号},    {settelno},
  1583.         {最寄りのアクセスポイントの種別(速度・ROAD1/2)},    {settelty},
  1584.         {電話回線の種類(ダイヤル/プッシュ回線)},    {setline},
  1585.         {受信データの格納先(ドライブ名・パス名)},    {setlogd},
  1586.         {NiftyのユーザID},                {setid},
  1587.         {Niftyのパスワード(通信時に入れることも可能)},    {setpass},
  1588.         {巡回するフォーラムの設定(複数可能)},        {setforum},
  1589.         {巡回するHPの設定(複数可能)},            {sethp});
  1590.     /*im(modem={} || telno={} || line={} || id={})*/
  1591.     im(loopon)
  1592.     });
  1593.     %fname current | {\MOPSET.PLP};
  1594.     case(@filechk( fname ),
  1595.         {Yes},{delfile( fname )});
  1596.     putplp({modem},modem);
  1597.     putplp({telno},telno);
  1598.     putplp({telty},telty);
  1599.     putplp({telno2},telno2);
  1600.     putplp({telty2},telty2);
  1601.     putplp({line},line);
  1602.     putplp({id},id);
  1603.     putplp({pass},pass);
  1604.     putplp({logd},logd);
  1605.     putplp({forum},forum);
  1606.     putplp({hp},hp);
  1607.  
  1608. };
  1609. /***********************************************************************
  1610. *
  1611. *              MOPTERMの終了処理
  1612. *
  1613. ***********************************************************************/
  1614. %stopmop{
  1615.     select({本当に終了して良いですか?},99999,{},
  1616.           {  はい   },{stopterm},
  1617.       {  いいえ  },{})
  1618. };
  1619.  
  1620.  
  1621.  
  1622. /***********************************************************************
  1623. *
  1624. *              全体のメイン処理
  1625. *
  1626. ***********************************************************************/
  1627.  
  1628. %current @case(@nochar(@getcdir),
  1629.                 3,{getchar(@getcdir,1,2)},
  1630.          ,{getcdir});
  1631. backclr(50,80,50);
  1632. footnote({});
  1633. stopbit(1);
  1634. dataleng({8bit});
  1635. xon({Yes});
  1636. rscs({Yes});
  1637. parity({None});
  1638. setoak({J});
  1639. click({No});
  1640. nattou({Yes});
  1641.  
  1642. /* オートパイロット停止時にPF12で再起動できるように */
  1643. setpf(12,{footnote({Loding..});}|
  1644.     {setcdir(} | @xc({7b}) | @getcdir | @xc({7d}) | {);} 
  1645.     | {#NYAN.PLT});
  1646.  
  1647.  
  1648. logd:={B:};    /* default */
  1649. case(@filechk( current | {\MOPSET.PLP}),
  1650.     {Yes},{#MOPSET.PLP},
  1651.     {No},{setupplt});
  1652.  
  1653. loop({
  1654.     select({処理を選んで下さい},999999,,
  1655.         {      自動通信を行います        },autoacc,
  1656.         {     受信文書の参照をします      },readdoc,
  1657.         {    送信文書の作成/更新をします     },senddoc,
  1658.         {      各種設定を変更します       },setupplt,
  1659.         {   自動処理を終了します(PF12で再起動)   },{stop},
  1660.         {    MOPTERMを終了します      },stopmop);
  1661.     im({Yes});
  1662. })
  1663.